#!/usr/bin/env python
# -*- coding: utf-8 -*-
# (c) 2013, Ralph Bean <rbean@redhat.com>
#           LGPLv2+
#
# You can pass this action an arbitrary number of kw arguments which will be
# used to make up the main message body (json).
#
# Dedicated to Seth Vidal.  This was his idea.

DOCUMENTATION = '''
---
module: fedmsg
short_description: Publish a message to fedmsg.
description:
   - Send a message to a fedmsg-relay daemon.
options:
  topic:
    description:
      - The short portion of the message topic.
    required: false
    default: log
  modname:
    description:
      - The modname portion of the message topic.
    required: false
    default: ansible

requirements: [ fedmsg ]
author: Ralph Bean
'''

EXAMPLES = '''
- fedmsg: msg="Testing this out"

- local_action: fedmsg
                topic="run.complete"
                msg="{{ ansible_date_time.iso8601 }}"
'''

import fedmsg
import fedmsg.config


def main():

    module = AnsibleModule(
        argument_spec=dict(
            topic=dict(default="log"),
            modname=dict(default="ansible"),
            cert_prefix=dict(default="ansible"),
        ),
        check_invalid_arguments=False,
        supports_check_mode=True
    )

    topic = module.params.pop('topic')
    modname = module.params.pop('modname')
    cert_prefix = module.params.pop('cert_prefix')

    try:
        config = fedmsg.config.load_config()
        config.update(dict(
            name='relay_inbound',
            cert_prefix=cert_prefix,
            active=True,
        ))
        fedmsg.init(**config)
    except Exception, e:
        module.fail_json(msg="unable to initialize fedmsg: %s" % e)

    try:
        fedmsg.publish(modname=modname, topic=topic, msg=module.params)
    except Exception, e:
        module.fail_json(msg="unable to send to fedmsg: %s" % e)

    module.exit_json(changed=False, **module.params)

# this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>>
main()
